Jackson লাইব্রেরি সরাসরি JAXB (Java Architecture for XML Binding) অ্যানোটেশন সমর্থন করে। এটি আপনাকে এমন মডেল ক্লাসগুলোর সাথে JSON ডেটা ব্যবহার করতে দেয় যেগুলো ইতিমধ্যেই JAXB অ্যানোটেশন সহ XML ডেটা ম্যানেজ করতে ব্যবহৃত হয়।
JAXB এবং Jackson এর ইন্টিগ্রেশন
JAXB Annotations কি?
JAXB অ্যানোটেশন XML ডেটার Serialization এবং Deserialization করার জন্য Java ক্লাসগুলোর জন্য মেটাডাটা সরবরাহ করে। উদাহরণস্বরূপ:
@XmlRootElement: রুট এলিমেন্ট নির্ধারণ করে।@XmlElement: XML এর একটি ফিল্ড বা এলিমেন্ট নির্ধারণ করে।@XmlAttribute: XML এর একটি অ্যাট্রিবিউট নির্ধারণ করে।
Jackson এর জন্য JAXB Annotation মডিউল
Jackson এর একটি অতিরিক্ত মডিউল আছে, যা JAXB অ্যানোটেশনগুলোর সাথে JSON ডেটা ম্যানিপুলেট করতে দেয়।
ম্যাভেন ডিপেনডেন্সি:
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
<version>2.15.2</version> <!-- সর্বশেষ ভার্সন -->
</dependency>
JAXB Annotation সহ মডেল ক্লাস তৈরি
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class User {
private String name;
private int age;
@XmlElement
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
ObjectMapper কনফিগারেশন (JAXB Annotation ব্যবহার করে)
JAXB Module রেজিস্টার করা
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
public class JacksonWithJaxbExample {
public static void main(String[] args) throws Exception {
// JAXB Annotation সমর্থনকারী ObjectMapper তৈরি
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JaxbAnnotationModule());
// মডেল অবজেক্ট তৈরি
User user = new User();
user.setName("Alice");
user.setAge(30);
// JSON Serialization
String json = mapper.writeValueAsString(user);
System.out.println("Serialized JSON: " + json);
// JSON Deserialization
String jsonString = "{\"name\":\"Alice\",\"age\":30}";
User deserializedUser = mapper.readValue(jsonString, User.class);
System.out.println("Deserialized User: " + deserializedUser.getName() + ", " + deserializedUser.getAge());
}
}
আউটপুট
Serialization:
{"name":"Alice","age":30}
Deserialization:
Deserialized User: Alice, 30
JAXB এবং JSON এর মধ্যে Mapping
@XmlRootElement→ JSON রুট অবজেক্ট।@XmlElement→ JSON এর একটি ফিল্ড।@XmlAttribute→ JSON ফিল্ড হিসেবে কাজ করবে, তবে এটি XML এ অ্যাট্রিবিউট হিসেবে কাজ করে।
উদাহরণ: @XmlAttribute
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Product {
@XmlAttribute
private int id;
private String name;
@XmlElement
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
Serialization:
{"id":1,"name":"Laptop"}
Spring Boot এবং JAXB Annotation সহ REST API উদাহরণ
Controller উদাহরণ:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/user")
public User getUser() {
User user = new User();
user.setName("Alice");
user.setAge(30);
return user;
}
}
Spring Boot Configuration:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JaxbAnnotationModule());
return mapper;
}
}
API Output:
{"name":"Alice","age":30}
- Jackson এবং JAXB এর ইন্টিগ্রেশন আপনাকে JSON এবং XML ফরম্যাট উভয়ের সাথে কাজ করার সময় মডেল ক্লাস পুনরায় লেখার প্রয়োজনীয়তা থেকে মুক্তি দেয়।
JaxbAnnotationModuleJackson এর ObjectMapper এ রেজিস্টার করে JAXB অ্যানোটেশন সমর্থন সক্ষম করা যায়।- এটি বিশেষভাবে কার্যকর যখন একটি API JSON এবং XML ফরম্যাট উভয়ই সমর্থন করে।
Content added By
Read more